package com.kaoyaya.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期工具类
 * @date 2013-1-23
 * @author Goven
 * @email gxl3999@gmail.com
 */
public class DateUtil {
	
	/**
	 * 获得日历对象
	 * @param date 日期
	 * @return 日历
	 * @author Goven
	 * @date 2012-12-31
	 */
	public static Calendar calendar(Date date){
		if (date == null) {
			date = new Date();
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar;
	}
	
	/**
	 * 获取给定日期的月份和日的组合字符串，例如：12月31日
	 * @param date 日期，如果为null，则设为当前日期
	 * @return 月份和日的组合字符串
	 * @author Goven
	 * @date 2012-12-31
	 */
	public static String getMMdd(Date date) {
		Calendar calendar = calendar(date);
		
		int month = calendar.get(Calendar.MONTH) + 1;
		int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
		
		StringBuffer sb = new StringBuffer();
		sb.append(month).append("月").append(dayOfMonth).append("日");
		return sb.toString();
	}
	
	/**
	 * 获取给定日期的星期，例如：星期一
	 * @param date 日期，如果为null，则设为当前日期
	 * @return 星期几
	 * @author Goven
	 * @date 2012-12-31
	 */
	public static String getDayOfWeek(Date date) {
		String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
		Calendar calendar = calendar(date);
		int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;
		if (w < 0)
			w = 0;
		return weekDays[w];
	}
	
	/**
	 * 格式化给定的日期，转化为字符串
	 * @param date 日期
	 * @return 日期字符串
	 * @author Goven
	 * @date 2012-12-31
	 */
	public static String dateMouthTime(){
		String format = new SimpleDateFormat("MM/dd HH:mm").format(new Date());
		return "["+format+"]";
	}
	
	/**
	 * 获取给定日期的开始时间，例如2012年12月31日的开始时间是：2012-12-31 00:00:00
	 * @param date 日期，如果为null，则设为当前日期
	 * @return 日期的开始时间字符串
	 * @author Goven
	 * @date 2012-12-31
	 */
	public static String dayBegin(Date date){
		Calendar calendar = calendar(date);
		calendar.set(Calendar.HOUR_OF_DAY, 0);  
		calendar.set(Calendar.MINUTE, 0);  
		calendar.set(Calendar.SECOND, 0);
		return date2Str(calendar.getTime());
	}
	
	/**
	 * 获取给定日期的结束时间，即第二天的开始时间，例如2012年12月31日的结束时间是：2013-01-01 00:00:00
	 * 当然数据库查询记录时要小于这个时间，不然可能会有重复的记录
	 * @param date 日期，如果为null，则设为当前日期
	 * @return 日期的结束时间字符串
	 * @author Goven
	 * @date 2012-12-31
	 */
	public static String dayEnd(Date date){
		Calendar calendar = calendar(date);
		calendar.set(Calendar.HOUR_OF_DAY, 23);
		calendar.set(Calendar.MINUTE, 59);
		calendar.set(Calendar.SECOND, 59);
		calendar.add(Calendar.SECOND, 1);
		return date2Str(calendar.getTime());
	}
	
	/**
	 * 格式化给定的日期，转化为字符串
	 * @param date 日期
	 * @return 日期字符串
	 * @author Goven
	 * @date 2012-12-31
	 */
	public static String date2Str(Date date){
		return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
	}
	
	/**
	 * 解析给定的字符串，转换为日期对象
	 * @param dateStr 日期字符串
	 * @return 日期
	 * @author Goven
	 * @date 2013-1-6
	 */
	public static Date str2Date(String dateStr){
		DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			return format.parse(dateStr);
		} catch (ParseException e) {
			return null;
		}
	}
}
